/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Threads;

import Monitores.MonitorFicherosDescargados;
import Monitores.MonitorValoresADescargar;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import utilidades.ConstructorURL;

/**
 * Thread que coge valores del MonitorValoresADescargar, construye una URL
 * para descargar un CSV y una vez descargado almacena el path de dicho 
 * fichero en MonitorFicherosDescargados.
 * @author felipe
 */
public class ThreadDescarga implements Runnable {

    private final MonitorValoresADescargar monitorValoresADescargar;
    private final ConstructorURL downloader;
    private final MonitorFicherosDescargados monitorListaFicheros;
    private Boolean flag;

    public ThreadDescarga(MonitorValoresADescargar monitorValoresADescargar, MonitorFicherosDescargados monitorListaFicheros) {
        super();
        this.monitorValoresADescargar = monitorValoresADescargar;
        this.monitorListaFicheros = monitorListaFicheros;
        this.downloader = new ConstructorURL(1, 1, 2012, 1, 1, 2013, "d");
        this.flag = true;
    }

    @Override
    public void run() {
        while (flag) {
            String valor = monitorValoresADescargar.getValor();
            if (valor != null) {
                String path = "/home/felipe/NetBeansProjects/YahooFinances/CSV/" + valor + ".csv";
                URL url = downloader.urlCreator(valor);
                try {
                    URLConnection urlCon = url.openConnection();
                    InputStream is = urlCon.getInputStream();
                    FileOutputStream fos = new FileOutputStream(path);
                    byte[] array = new byte[1000]; // buffer temporal de lectura.
                    int leido = is.read(array);
                    while (leido > 0) {
                        fos.write(array, 0, leido);
                        leido = is.read(array);
                    }
                    is.close();
                    fos.close();
                    monitorListaFicheros.putFichero(path);
                } catch (IOException ex) {
                    //System.out.println("Historial de " + valor + " no disponible desde Yahoo Finances");
                    monitorListaFicheros.pathNoDisponible();
                }
            } else {
                flag = false;
            }
        }
    }
}